<!DOCTYPE html>
<html lang="en" dir="ltr" class="client-nojs">
<head>
<title>Constant expressions - cppreference.com</title>
<meta charset="UTF-8">
<meta name="generator" content="MediaWiki 1.21.2">
<link rel="shortcut icon" href="../../../common/favicon.ico">
<link rel="stylesheet" href="../../../common/ext.css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" href="../../../common/site_modules.css">
<style>a:lang(ar),a:lang(ckb),a:lang(fa),a:lang(kk-arab),a:lang(mzn),a:lang(ps),a:lang(ur){text-decoration:none}#toc{display:none}.editsection{display:none}
/* cache key: mwiki1-mwiki_en_:resourceloader:filter:minify-css:7:472787eddcf4605d11de8c7ef047234f */</style>

<script src="../../../common/startup_scripts.js"></script>
<script>if(window.mw){
mw.config.set({"wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"c/language/constant_expression","wgTitle":"c/language/constant expression","wgCurRevisionId":139681,"wgArticleId":13898,"wgIsArticle":true,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["Todo with reason"],"wgBreakFrames":false,"wgPageContentLanguage":"en","wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""],"wgDefaultDateFormat":"dmy","wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgMonthNamesShort":["","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"wgRelevantPageName":"c/language/constant_expression","wgRestrictionEdit":[],"wgRestrictionMove":[]});
}</script><script>if(window.mw){
mw.loader.implement("user.options",function(){mw.user.options.set({"ccmeonemails":0,"cols":80,"date":"default","diffonly":0,"disablemail":0,"disablesuggest":0,"editfont":"default","editondblclick":0,"editsection":0,"editsectiononrightclick":0,"enotifminoredits":0,"enotifrevealaddr":0,"enotifusertalkpages":1,"enotifwatchlistpages":0,"extendwatchlist":0,"externaldiff":0,"externaleditor":0,"fancysig":0,"forceeditsummary":0,"gender":"unknown","hideminor":0,"hidepatrolled":0,"imagesize":2,"justify":0,"math":1,"minordefault":0,"newpageshidepatrolled":0,"nocache":0,"noconvertlink":0,"norollbackdiff":0,"numberheadings":0,"previewonfirst":0,"previewontop":1,"quickbar":5,"rcdays":7,"rclimit":50,"rememberpassword":0,"rows":25,"searchlimit":20,"showhiddencats":0,"showjumplinks":1,"shownumberswatching":1,"showtoc":0,"showtoolbar":1,"skin":"cppreference2","stubthreshold":0,"thumbsize":2,"underline":2,"uselivepreview":0,"usenewrc":0,"watchcreations":0,"watchdefault":0,"watchdeletion":0,
"watchlistdays":3,"watchlisthideanons":0,"watchlisthidebots":0,"watchlisthideliu":0,"watchlisthideminor":0,"watchlisthideown":0,"watchlisthidepatrolled":0,"watchmoves":0,"wllimit":250,"variant":"en","language":"en","searchNs0":true,"searchNs1":false,"searchNs2":false,"searchNs3":false,"searchNs4":false,"searchNs5":false,"searchNs6":false,"searchNs7":false,"searchNs8":false,"searchNs9":false,"searchNs10":false,"searchNs11":false,"searchNs12":false,"searchNs13":false,"searchNs14":false,"searchNs15":false,"gadget-ColiruCompiler":1,"gadget-MathJax":1});;},{},{});mw.loader.implement("user.tokens",function(){mw.user.tokens.set({"editToken":"+\\","patrolToken":false,"watchToken":false});;},{},{});
/* cache key: mwiki1-mwiki_en_:resourceloader:filter:minify-js:7:9f05c6caceb9bb1a482b6cebd4c5a330 */
}</script>
<script>if(window.mw){
mw.loader.load(["mediawiki.page.startup","mediawiki.legacy.wikibits","mediawiki.legacy.ajax"]);
}</script>
<style type="text/css">/*<![CDATA[*/
.source-c {line-height: normal;}
.source-c li, .source-c pre {
	line-height: normal; border: 0px none white;
}
/**
 * GeSHi Dynamically Generated Stylesheet
 * --------------------------------------
 * Dynamically generated stylesheet for c
 * CSS class: source-c, CSS id: 
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 * --------------------------------------
 */
.c.source-c .de1, .c.source-c .de2 {font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;}
.c.source-c  {font-family:monospace;}
.c.source-c .imp {font-weight: bold; color: red;}
.c.source-c li, .c.source-c .li1 {font-weight: normal; vertical-align:top;}
.c.source-c .ln {width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;}
.c.source-c .li2 {font-weight: bold; vertical-align:top;}
.c.source-c .kw1 {color: #0000dd;}
.c.source-c .kw2 {color: #0000ff;}
.c.source-c .kw3 {color: #0000dd;}
.c.source-c .kw4 {color: #0000ff;}
.c.source-c .co1 {color: #909090;}
.c.source-c .co2 {color: #339900;}
.c.source-c .coMULTI {color: #ff0000; font-style: italic;}
.c.source-c .es0 {color: #008000; font-weight: bold;}
.c.source-c .es1 {color: #008000; font-weight: bold;}
.c.source-c .es2 {color: #008000; font-weight: bold;}
.c.source-c .es3 {color: #008000; font-weight: bold;}
.c.source-c .es4 {color: #008000; font-weight: bold;}
.c.source-c .es5 {color: #008000; font-weight: bold;}
.c.source-c .br0 {color: #008000;}
.c.source-c .sy0 {color: #008000;}
.c.source-c .sy1 {color: #000080;}
.c.source-c .sy2 {color: #000040;}
.c.source-c .sy3 {color: #000040;}
.c.source-c .sy4 {color: #008080;}
.c.source-c .st0 {color: #008000;}
.c.source-c .nu0 {color: #000080;}
.c.source-c .nu6 {color:#000080;}
.c.source-c .nu8 {color:#000080;}
.c.source-c .nu12 {color:#000080;}
.c.source-c .nu16 {color:#000080;}
.c.source-c .nu17 {color:#000080;}
.c.source-c .nu18 {color:#000080;}
.c.source-c .nu19 {color:#000080;}
.c.source-c .ln-xtra, .c.source-c li.ln-xtra, .c.source-c div.ln-xtra {background-color: #ffc;}
.c.source-c span.xtra { display:block; }

/*]]>*/
</style><!--[if lt IE 7]><style type="text/css">body{behavior:url("/mwiki/skins/cppreference2/csshover.min.htc")}</style><![endif]--></head>
<body class="mediawiki ltr sitedir-ltr ns-0 ns-subject page-c_language_constant_expression skin-cppreference2 action-view cpp-navbar">
        <!-- header -->
        <!-- /header -->
        <!-- content -->
<div id="cpp-content-base">
            <div id="content">
                <a id="top"></a>
                <div id="mw-js-message" style="display:none;"></div>
                                <!-- firstHeading -->
<h1 id="firstHeading" class="firstHeading">Constant expressions</h1>
                <!-- /firstHeading -->
                <!-- bodyContent -->
                <div id="bodyContent">
                                        <!-- tagline -->
                    <div id="siteSub">From cppreference.com</div>
                    <!-- /tagline -->
                                        <!-- subtitle -->
                    <div id="contentSub"><span class="subpages">&lt; <a href="../../c.html" title="c">c</a>‎ | <a href="../language.html" title="c/language">language</a></span></div>
                    <!-- /subtitle -->
                                                            <!-- bodycontent -->
                    <div id="mw-content-text" lang="en" dir="ltr" class="mw-content-ltr"><div class="t-navbar" style=""><div class="t-navbar-sep"> </div><div class="t-navbar-head"><a href="../../c.html" title="c"> C</a><div class="t-navbar-menu"><div><div><table class="t-nv-begin" cellpadding="0" style="line-height:1.1em;">
<tr class="t-nv"><td colspan="5"> <a href="../language.html" title="c/language"> Language</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../header.html" title="c/header"> Headers</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../types.html" title="c/types"> Type support</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../program.html" title="c/program"> Program utilities</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../variadic.html" title="c/variadic"> Variadic function support</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../error.html" title="c/error"> Error handling</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../memory.html" title="c/memory"> Dynamic memory management</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../string.html" title="c/string"> Strings library</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../algorithm.html" title="c/algorithm"> Algorithms</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../numeric.html" title="c/numeric"> Numerics</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../chrono.html" title="c/chrono"> Date and time utilities</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../io.html" title="c/io"> Input/output support</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../locale.html" title="c/locale"> Localization support</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../thread.html" title="c/thread"> Concurrency support</a> <span class="t-mark-rev t-since-c11">(C11)</span> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../experimental.html" title="c/experimental"> Technical Specifications</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../index.html" title="c/symbol index"> Symbol index</a> </td></tr>
</table></div><div></div></div></div></div><div class="t-navbar-sep"> </div><div class="t-navbar-head"><a href="../language.html" title="c/language"> C language</a><div class="t-navbar-menu"><div><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="basic_concepts.html" title="c/language/basic concepts">Basic concepts</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../keyword.html" title="c/keyword"> Keywords</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../preprocessor.html" title="c/preprocessor"> Preprocessor</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="statements.html" title="c/language/statements"> Statements</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="expressions.html" title="c/language/expressions"> Expressions</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="initialization.html" title="c/language/initialization"> Initialization</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="declarations.html" title="c/language/declarations"> Declarations</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="functions.html" title="c/language/functions"> Functions</a></td></tr>
<tr class="t-nv-h2"><td colspan="5"> Miscellaneous</td></tr>
<tr class="t-nv"><td colspan="5"> <a href="history.html" title="c/language/history"> History of C</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../experimental.html" title="c/experimental">Technical Specifications</a> </td></tr>
</table></div><div></div></div></div></div><div class="t-navbar-sep"> </div><div class="t-navbar-head"><a href="expressions.html" title="c/language/expressions"> Expressions</a><div class="t-navbar-menu"><div><div style="display:inline-block">
<div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv-h2"><td colspan="5"> General </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="value_category.html" title="c/language/value category"> value category</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="eval_order.html" title="c/language/eval order"> evaluation order and sequence points</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <strong class="selflink">constant expressions</strong> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="conversion.html" title="c/language/conversion">implicit conversions</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="generic.html" title="c/language/generic">generic selection</a></td></tr>
<tr class="t-nv-h2"><td colspan="5"> <a href="expressions.html#Constants_and_literals" title="c/language/expressions">constants and literals</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="integer_constant.html" title="c/language/integer constant"> integer constant</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="floating_constant.html" title="c/language/floating constant"> floating constant</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="character_constant.html" title="c/language/character constant"> character constant</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="string_literal.html" title="c/language/string literal"> string literal</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="compound_literal.html" title="c/language/compound literal"> compound literal</a></td></tr>
<tr class="t-nv-h2"><td colspan="5"> <a href="expressions.html#Operators" title="c/language/expressions">operators</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="operator_precedence.html" title="c/language/operator precedence">operator precedence</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="operator_member_access.html" title="c/language/operator member access">member access and indirection</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="operator_logical.html" title="c/language/operator logical">logical operators</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="operator_comparison.html" title="c/language/operator comparison">comparison operators</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="operator_arithmetic.html" title="c/language/operator arithmetic">arithmetic operators</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="operator_assignment.html" title="c/language/operator assignment">assignment operators</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="operator_incdec.html" title="c/language/operator incdec">increment and decrement</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="operator_other.html" title="c/language/operator other">function call, comma, conditional operator</a> </td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="sizeof.html" title="c/language/sizeof"><span class="t-lines"><span>sizeof</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="_Alignof.html" title="c/language/ Alignof"><span class="t-lines"><span>_Alignof</span></span></a></div><div><span class="t-lines"><span><span class="t-mark-rev t-since-c11">(C11)</span></span></span></div></div></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="cast.html" title="c/language/cast">cast operators</a> </td></tr>
</table></div>
</div><div></div></div></div></div><div class="t-navbar-sep"> </div></div>
<p>Several varieties of expressions are known as <i>constant expressions</i>
</p>
<h3><span class="mw-headline" id="Preprocessor_constant_expression">Preprocessor constant expression</span></h3>
<p>The expression following <a href="../preprocessor/conditional.html" title="c/preprocessor/conditional">#if or #elif</a> must expand to
</p>
<ul><li> <a href="expressions.html#Operators" title="c/language/expressions">operators</a> other than <a href="operator_assignment.html" title="c/language/operator assignment">assignment</a>, <a href="operator_incdec.html" title="c/language/operator incdec">increment, decrement</a>, <a href="operator_other.html#Function_call" title="c/language/operator other">function-call</a>, or <a href="operator_other.html#Comma_operator" title="c/language/operator other">comma</a> whose arguments are preprocessor constant expressions
</li><li> <a href="integer_constant.html" title="c/language/integer constant">integer constants</a>
</li><li> <a href="character_constant.html" title="c/language/character constant">character constants</a>
</li><li> the special preprocessor operator <code>defined</code>
</li></ul>
<p>Character constants, when evaluated in <code>#if</code>-expressions, may be interpreted in the source
character set, the execution character set, or some other implementation-defined character set.
</p>
 <table class="t-rev-begin">
<tr class="t-rev t-since-c99"><td>
<p>Integer arithmetic in <code>#if</code>-expressions is performed using the semantics of <span class="t-lc"><a href="../types/integer.html" title="c/types/integer">intmax_t</a></span> for signed types and <span class="t-lc"><a href="../types/integer.html" title="c/types/integer">uintmax_t</a></span> for unsigned types.
</p>
</td>
<td><span class="t-mark-rev t-since-c99">(since C99)</span></td></tr>
</table>
<h3><span class="mw-headline" id="Integer_constant_expression">Integer constant expression</span></h3>
<p>An integer constant expression is an expression that consists only of
</p>
<ul><li> <a href="expressions.html#Operators" title="c/language/expressions">operators</a> other than <a href="operator_assignment.html" title="c/language/operator assignment">assignment</a>, <a href="operator_incdec.html" title="c/language/operator incdec">increment, decrement</a>, <a href="operator_other.html#Function_call" title="c/language/operator other">function-call</a>, or <a href="operator_other.html#Comma_operator" title="c/language/operator other">comma</a>, except that <a href="cast.html" title="c/language/cast">cast</a> operators can only cast arithmetic types to integer types
</li><li> <a href="integer_constant.html" title="c/language/integer constant">integer constants</a>
</li><li> <a href="enum.html" title="c/language/enum">enumeration constants</a>
</li><li> <a href="character_constant.html" title="c/language/character constant">character constants</a>
</li><li> <a href="floating_constant.html" title="c/language/floating constant">floating constants</a>, but only if they are immediately used as operands of casts to integer type
</li><li> <a href="sizeof.html" title="c/language/sizeof"><code>sizeof</code></a> operators <span class="t-rev-inl t-since-c99"><span>whose operands are not VLA</span> <span><span class="t-mark-rev t-since-c99">(since C99)</span></span></span>
</li></ul>
 <table class="t-rev-begin">
<tr class="t-rev t-since-c11"><td>
<ul><li> <a href="_Alignof.html" title="c/language/ Alignof"><code>_Alignof</code></a> operators
</li></ul>
</td>
<td><span class="t-mark-rev t-since-c11">(since C11)</span></td></tr>
</table>
<p>Integer constant expressions are evaluated at compile time. The following contexts require expressions that are known as <i>integer constant expressions</i>:
</p>
<ul><li> The size of a <a href="bit_field.html" title="c/language/bit field">bit field</a>.
</li><li> The value of an <a href="enum.html" title="c/language/enum">enumeration constant</a>
</li><li> The <code>case</code> label of a <a href="switch.html" title="c/language/switch">switch statement</a>
</li><li> The size of a <span class="t-rev-inl t-since-c99"><span> non-VLA</span> <span><span class="t-mark-rev t-since-c99">(since C99)</span></span></span> array
</li><li> Integer to pointer implicit <a href="conversion.html" title="c/language/conversion">conversion</a>.
</li></ul>
 <table class="t-rev-begin">
<tr class="t-rev t-since-c99"><td>
<ul><li> The index in an <a href="array_initialization.html" title="c/language/array initialization">array designator</a>
</li></ul>
</td>
<td><span class="t-mark-rev t-since-c99">(since C99)</span></td></tr>
<tr class="t-rev t-since-c11"><td>
<ul><li> The first argument of <a href="static_assert.html" title="c/language/ Static assert"><code>_Static_assert</code></a>
</li><li> The integer argument of <a href="_Alignas.html" title="c/language/ Alignas"><code>_Alignas</code></a>
</li></ul>
</td>
<td><span class="t-mark-rev t-since-c11">(since C11)</span></td></tr>
</table>
<h3><span class="mw-headline" id="Static_initializer">Static initializer</span></h3>
<p>Expressions that are used in the <a href="initialization.html" title="c/language/initialization">initializers</a> of objects with static and thread_local <a href="storage_duration.html" title="c/language/storage duration">storage duration</a> must be expressions that may be one of the following
</p>
<div class="t-li1"><span class="t-li">1)</span> <i>arithmetic constant expression</i>, which is an expression of any arithmetic type that consists of
<dl><dd><ul><li> <a href="expressions.html#Operators" title="c/language/expressions">operators</a> other than <a href="operator_assignment.html" title="c/language/operator assignment">assignment</a>, <a href="operator_incdec.html" title="c/language/operator incdec">increment, decrement</a>, <a href="operator_other.html#Function_call" title="c/language/operator other">function-call</a>, or <a href="operator_other.html#Comma_operator" title="c/language/operator other">comma</a>, except that <a href="cast.html" title="c/language/cast">cast</a> operators must be converting arithmetic types to other arithmetic types
</li><li> <a href="integer_constant.html" title="c/language/integer constant">integer constants</a>
</li><li> <a href="floating_constant.html" title="c/language/floating constant">floating constants</a>
</li><li> <a href="enum.html" title="c/language/enum">enumeration constants</a>
</li><li> <a href="character_constant.html" title="c/language/character constant">character constants</a>
</li><li> <a href="sizeof.html" title="c/language/sizeof"><code>sizeof</code></a> operators <span class="t-rev-inl t-since-c99"><span>whose operands are not VLA</span> <span><span class="t-mark-rev t-since-c99">(since C99)</span></span></span>
</li></ul>
</dd></dl>
 <table class="t-rev-begin">
<tr class="t-rev t-since-c11"><td>
<dl><dd><ul><li> <a href="_Alignof.html" title="c/language/ Alignof"><code>_Alignof</code></a> operators
</li></ul>
</dd></dl>
</td>
<td><span class="t-mark-rev t-since-c11">(since C11)</span></td></tr>
</table></div>
<div class="t-li1"><span class="t-li">2)</span> the null pointer constant <span class="t-lc"><a href="../types/NULL.html" title="c/types/NULL">NULL</a></span></div>
<div class="t-li1"><span class="t-li">3)</span> <i>address constant expression</i>, which is 
<dl><dd><ul><li> a null pointer
</li><li> <a href="value_category.html" title="c/language/value category">lvalue</a> designating an object of static <a href="storage_duration.html" title="c/language/storage duration">storage duration</a> or a function designator, converted to a pointer either
</li></ul>
<dl><dd><ul><li> by using the unary address-of operator
</li><li> by casting an integer constant to a pointer
</li><li> by array-to-pointer or function-to-pointer implicit <a href="conversion.html" title="c/language/conversion">conversion</a></li></ul></dd></dl></dd></dl></div>



<div class="t-li1"><span class="t-li">4)</span> <i>address constant expression</i> of some complete object type, plus or minus an <i>integer constant expression</i></div>
<div class="t-li1"><span class="t-li">5)</span> constant expression of one of the other forms accepted by the implementation.</div>
<p>Unlike with integer constant expressions, static initializer expressions are not required to be evaluated at compile time; the compiler is at liberty to turn such initializers into executable code which is invoked prior to program startup.
</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="c source-c"><pre class="de1"><span class="kw4">static</span> <span class="kw4">int</span> i <span class="sy1">=</span> <span class="nu0">2</span> <span class="sy3">||</span> <span class="nu0">1</span> <span class="sy2">/</span> <span class="nu0">0</span><span class="sy4">;</span> <span class="co1">// initializes i to value 1</span></pre></div></div>
<table class="metadata plainlinks ambox mbox-small-left ambox-notice" style=""><tr><td class="mbox-empty-cell"></td><td class="mbox-text" style="">This section is incomplete<br>Reason: other mini-examples </td></tr></table>
<p>The value of a floating-point static initializer is never less accurate than the value of the same expression executed at run time, but it may be better.
</p>
<h3><span class="mw-headline" id="Floating-point_constant_expressions">Floating-point constant expressions</span></h3>
<p>Arithmetic constant expressions of floating-point types that are not used in static initializers are always evaluated as-if during run-time and are affected by the <a href="../numeric/fenv/FE_round.html" title="c/numeric/fenv/FE round">current rounding</a> (if <a href="../preprocessor/impl.html" title="c/preprocessor/impl">FENV_ACCESS</a> is on) and report errors as specified in <a href="../numeric/math/math_errhandling.html" title="c/numeric/math/math errhandling"><tt>math_errhandling</tt></a>.
</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="c source-c"><pre class="de1"><span class="kw4">void</span> f<span class="br0">(</span><span class="kw4">void</span><span class="br0">)</span>
<span class="br0">{</span>
<span class="co2">#pragma STDC FENV_ACCESS ON</span>
    <span class="kw4">static</span> <span class="kw4">float</span> x <span class="sy1">=</span> <span class="nu16">0.0</span><span class="sy2">/</span><span class="nu16">0.0</span><span class="sy4">;</span> <span class="co1">// static initializer: does not raise an exception</span>
    <span class="kw4">float</span> w<span class="br0">[</span><span class="br0">]</span> <span class="sy1">=</span> <span class="br0">{</span> <span class="nu16">0.0</span><span class="sy2">/</span><span class="nu16">0.0</span> <span class="br0">}</span><span class="sy4">;</span> <span class="co1">// raises an exception</span>
    <span class="kw4">float</span> y <span class="sy1">=</span> <span class="nu16">0.0</span><span class="sy2">/</span><span class="nu16">0.0</span><span class="sy4">;</span> <span class="co1">// raises an exception</span>
    <span class="kw4">double</span> z <span class="sy1">=</span> <span class="nu16">0.0</span><span class="sy2">/</span><span class="nu16">0.0</span><span class="sy4">;</span> <span class="co1">// raises an exception</span>
<span class="br0">}</span></pre></div></div>
<h3><span class="mw-headline" id="Notes">Notes</span></h3>
<p>If an expression evaluates to a value that is not representable by its type, it cannot be used as a constant expression.
</p><p>Implementations may accept other forms of constant expressions. However, these constant expressions are not considered as integer constant expressions, arithmetic constant expressions, or address constant expressions, and thus cannot be used in the contexts requiring these kinds of constant expressions. For example, <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">int</span> arr<span class="br0">[</span><span class="br0">(</span><span class="kw4">int</span><span class="br0">)</span><span class="sy2">+</span><span class="nu16">1.0</span><span class="br0">]</span><span class="sy4">;</span></span></span> declares a VLA.
</p>
<h3><span class="mw-headline" id="References">References</span></h3>
<div class="t-ref-std-17">
<ul><li> C17 standard (ISO/IEC 9899:2018): 
</li></ul>
<dl><dd><ul><li> 6.6 Constant expressions (p: 76-77)
</li></ul>
</dd></dl>
</div>
<div class="t-ref-std-11">
<ul><li> C11 standard (ISO/IEC 9899:2011): 
</li></ul>
<dl><dd><ul><li> 6.6 Constant expressions (p: 106-107)
</li></ul>
</dd></dl>
</div>
<div class="t-ref-std-c99">
<ul><li> C99 standard (ISO/IEC 9899:1999): 
</li></ul>
<dl><dd><ul><li> 6.6 Constant expressions (p: 95-96)
</li></ul>
</dd></dl>
</div>
<div class="t-ref-std-c89">
<ul><li> C89/C90 standard (ISO/IEC 9899:1990): 
</li></ul>
<dl><dd><ul><li> 3.4 CONSTANT EXPRESSIONS 
</li></ul>
</dd></dl>
</div>
<h3><span class="mw-headline" id="See_also">See also</span></h3>
<table class="t-dsc-begin">

</table>

<!-- 
NewPP limit report
Preprocessor visited node count: 2406/1000000
Preprocessor generated node count: 9303/1000000
Post‐expand include size: 50230/2097152 bytes
Template argument size: 8320/2097152 bytes
Highest expansion depth: 17/40
Expensive parser function count: 0/100
-->

<!-- Saved in parser cache with key mwiki1-mwiki_en_:pcache:idhash:13898-0!*!0!!en!*!* and timestamp 20220516105756 -->
</div>                    <!-- /bodycontent -->
                                        <!-- printfooter -->
                    <div class="printfooter">
                    Retrieved from "<a href="https://en.cppreference.com/mwiki/index.php?title=c/language/constant_expression&amp;oldid=139681">https://en.cppreference.com/mwiki/index.php?title=c/language/constant_expression&amp;oldid=139681</a>"                    </div>
                    <!-- /printfooter -->
                                                            <!-- catlinks -->
                    <!-- /catlinks -->
                                                            <div class="visualClear"></div>
                    <!-- debughtml -->
                                        <!-- /debughtml -->
                </div>
                <!-- /bodyContent -->
            </div>
        </div>
        <!-- /content -->
        <!-- footer -->
        <div id="cpp-footer-base" class="noprint">
            <div id="footer">
                        <div id="cpp-navigation">
            <h5>Navigation</h5>
            <ul><li><a href="https://en.cppreference.com/w/c/language/constant_expression">Online version</a></li><li>Offline version retrieved 2022-07-30 14:05.</li></ul></div>
                        <ul id="footer-info">
                                    <li id="footer-info-lastmod"> This page was last modified on 16 May 2022, at 03:57.</li>
                                    <li id="footer-info-viewcount">This page has been accessed 35,109 times.</li>
                            </ul>
                    </div>
        </div>
        <!-- /footer -->
        <script>if(window.mw){
mw.loader.state({"site":"loading","user":"missing","user.groups":"ready"});
}</script>
<script src="../../../common/skin_scripts.js"></script>
<script>if(window.mw){
mw.loader.load(["mediawiki.action.view.postEdit","mediawiki.user","mediawiki.page.ready","mediawiki.searchSuggest","mediawiki.hidpi","ext.gadget.ColiruCompiler","ext.gadget.MathJax"], null, true);
}</script>
<script src="../../../common/site_scripts.js"></script>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-2828341-1']);
_gaq.push(['_setDomainName', 'cppreference.com']);
_gaq.push(['_trackPageview']);
</script><!-- Served in 0.044 secs. -->
	</body>
<!-- Cached 20220516105928 -->
</html>